package com.colorlight.cloud.mqtt.base.core.endpoint;

import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;


/**
 * @author Demon
 */
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
@Component
public interface MqttGateway {
	
	/**
	 * 指定topic进行消息发送
	 *
	 * @param topic   主题
	 * @param payload 字节信息
	 **/
	void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, byte[] payload);
	
	
	/**
	 * 指定topic进行消息发送
	 *
	 * @param topic   主题
	 * @param payload 字节信息
	 **/
	void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, byte[] payload, @Header(MqttHeaders.QOS) Integer qos);
	
	/**
	 * json消息类型下发
	 *
	 * @param topic   主题
	 * @param payload json消息
	 * @author Demon
	 **/
	void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, String payload);
	
	/**
	 * mqtt 5.0协议
	 * duplicate：重复消息标识 与 id 混合使用
	 *
	 * @param qos       消息级别
	 * @param id        指令id
	 * @param retained  是否保留
	 * @param topic     主题
	 * @param duplicate 是否重复
	 * @param payload   消息实体
	 * @author Demon
	 */
	void sendToMqtt(@Header(MqttHeaders.QOS) String qos,
					@Header(MqttHeaders.ID) String id,
					@Header(MqttHeaders.RETAINED) Boolean retained,
					@Header(MqttHeaders.TOPIC) String topic,
					@Header(MqttHeaders.DUPLICATE) Boolean duplicate,
					byte[] payload);
	
}